/*****************************************************************************************
**  Author:dgz master
**  Contact：jiduxiong@dagongzao.com
**
*****************************************************************************************/
//此js文件是用来自定义扩展业务代码，可以扩展一些自定义页面或者重新配置生成的代码
import { ElForm, ElFormItem, ElInput, ElMessage } from 'element-plus';
import { h, ref } from 'vue'

let extension = {
  components: {
    //查询界面扩展组件
    gridHeader: '',
    gridBody: '',
    gridFooter: '',
    //新建、编辑弹出框扩展组件
    modelHeader: '',
    modelBody: '',
    modelRight: '',
    modelFooter: '',
  },
  tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
  buttons: { view: [], box: [], detail: [] }, //扩展的按钮
  methods: {
    //下面这些方法可以保留也可以删除
    onInit() {
      //框架初始化配置前，
      //示例：在按钮的最前面添加一个按钮
      //   this.buttons.unshift({  //也可以用push或者splice方法来修改buttons数组
      //     name: "按钮", //按钮名称
      //     icon: "el-icon-document", //按钮图标：https://element.eleme.cn/#/zh-CN/component/icon
      //     type: "primary", //按钮样式:https://element-plus.gitee.io/zh-CN/component/button.html
      //     //color:"#eee",//自定义按钮颜色
      //     onClick: function () {
      //       this.$Message.success("点击了按钮");
      //     }
      //   });

      //示例：设置修改新建、编辑弹出框字段标签的长度
      this.boxOptions.labelWidth = 150
      if (this.buttons.some((i) => i.value == 'Custom1')) {
        let tmp = this.buttons.find((i) => i.value == 'Custom1')
        tmp.name = '强制完成'
      }
      this.queryFields = ['TaskStatus', 'WorkOrder']
    },
    parentCall(getName) {
      console.log('parentCall')
    },
    getName() {
      console.log("getName")
    },
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
      // let list = _.cloneDeep(this.detailOptions.buttons)
      // this.detailOptions.buttons = list.slice(-1)
      let list = [
        {
          name: '启动',
          icon: 'el-icon-video-play',
          type: 'primary',
          plain: true,
          onClick: () => {
            let rows = this.getSelectRows()
            if (rows.length != 1) {
              return this.$message.error('请选择一行数据操作')
            }
            this.startTask(rows[0].ProductionTaskId)
          },
        },
      ]
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });
      this.buttons = this.buttons.concat(list)

      // 添加自定义函数,判断点击table的时候是查看还是编辑
      this.detail.handleTableColumn = () => {
        this.currentAction = this.const.SEE
        this.boxModel = true
        this.changeFormReadonly(true)
      }
      this.detail.pagination = {
        total: 0,
        size: 30, //默认分页大小写
        sizes: [10, 20, 30, 60],
        sortName: 'CreateTime',
        order: 'asc', //排序方式
      }
      // this.detail[0].pagination = {
      //   total: 0,
      //   size: 30,//默认分页大小写
      //   sizes: [10, 20, 30, 60],
      //   sortName: "CreateTime",
      //   order: "asc"//排序方式
      // }
    },
    startTask(id) {
      this.$confirm('确认启动生产任务？系统将依据生产任务自动产生物流调度任务并下发执行！', '警告', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      }).then(() => {
        this.http.post('api/Mds_ProductionTask/StartProductionTask?taskId=' + id, {}).then((r) => {
          this.$message.success('操作成功！')
          this.search()
        })
      })
    },
    searchBefore(param) {
      //界面查询前,可以给param.wheres添加查询参数
      //返回false，则不会执行查询
      return true
    },
    searchAfter(result) {
      //查询后，result返回的查询数据,可以在显示到表格前处理表格的值
      return true
    },
    addBefore(formData) {
      //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
      return true
    },
    updateBefore(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      return true
    },
    delBefore(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      return true
    },
    addAfter(formData) {
      //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
      //添加后刷新字典
      this.initDicKeys()
      return true
    },
    updateAfter(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      //添加后刷新字典
      this.initDicKeys()
      return true
    },
    delAfter(formData) {
      //编辑保存前formData为对象，包括明细表、删除行的Id
      //添加后刷新字典
      this.initDicKeys()
      return true
    },
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      // this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
    },
    modelOpenAfter(row) {
      this.detailOptions.columns.forEach((i) => {
        i.readonly = true
      })
      this.detailOptions.buttons.forEach((i) => {
        if (i.name !== '刷新') {
          i.hidden = true
        }
      })

      if (this.currentAction !== 'Add') {
        if (row.TaskStatus == 99 || row.TaskStatus == 9) {
          // 已完成、已取消
          this.changeFormReadonly(true)
        }
      }
      //点击编辑、新建按钮弹出框后，可以在此处写逻辑，如，从后台获取数据
      //(1)判断是编辑还是新建操作： this.currentAction=="Add";
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段="xxx";
      //如果需要给下拉框设置默认值，请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看：console.log(this.editFormOptions)
    },
    Custom1BtnFun() {
      if (this.getSelectRows().length != 1) return this.$message.error('请选择一行数据操作')
      this.forceCompleteTaskComplete(this.getSelectRows()[0])
    },
    /**
     * 强制完成
     * @param {*} row 选中行
     */
    forceCompleteTaskComplete(row) {
      const formData = ref({
        completionQuantity: '',
        completionReason: ''
      })
      const rules = {
        completionQuantity: [
          { required: true, message: '完成数量不能为空', trigger: 'blur' }
        ],
        completionReason: [
          { required: true, message: '完成原因不能为空', trigger: 'blur' }
        ]
      }
      let formRef = ref(null)
      this.$msgbox({
        title: '提示',
        message: () =>
          h(ElForm, {
            ref: (el) => { formRef.value = el; },
            model: formData.value,
            rules: rules,
            labelWidth: '100px',
            'onUpdate:model': (val) => {
              formData.value = val;
            }
          }, [
            h(ElFormItem, { label: '完成数量', prop: 'completionQuantity' }, [
              h(ElInput, {
                modelValue: formData.value.completionQuantity,
                'onUpdate:modelValue': (val) => {
                  formData.value.completionQuantity = val;
                }
              })
            ]),
            h(ElFormItem, { label: '完成原因', prop: 'completionReason' }, [
              h(ElInput, {
                modelValue: formData.value.completionReason,
                'onUpdate:modelValue': (val) => {
                  formData.value.completionReason = val
                }
              })
            ])
          ]),
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        beforeClose: (action, instance, done) => {
          if (action === 'confirm') {
            this.$nextTick(() => {
              formRef.value.validate((valid) => {
                if (valid) {
                  this.$confirm(`确认完成生产任务？请确保实际任务已经完成，系统将自动触发相关后续业务逻辑！`, '警告', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning',
                  })
                    .then(({ value }) => {
                      let url = this.$api.MdsProductionTask + 'FinishProductionTask'
                      let params = {
                        taskId: row.ProductionTaskId,
                        completionQuantity: formData.value.completionQuantity,
                        completionReason: formData.value.completionReason
                      }
                      this.http.post(url, params).then((r) => {
                        this.$message.success('操作成功')
                        this.search()
                        done()
                      })
                    })
                    .catch((e) => {
                      console.log(e)
                    })
                } else {
                  ElMessage.error('请填写完成数量和原因')
                }
            })
          })
          } else {
            done()
          }
        }
      }).catch(() => { })
    },
  },
}
export default extension;
